package com.kuang.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**Druid配置
 * @author FHL
 */
@Configuration
public class DruidConfig {
/*将自定义的Druid数据源添加到容器中，不再让Spring Boot自动创建绑定
* 全局配置文件中的druid数据源属性到com.alibaba.druid.pool.DruidDataSource
* 从而让它们生效
* @ConfigurationProperties的属性值注入到com.alibaba.druid.pool.DruidDataSourced
* 的同名参数中*/
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
    return new DruidDataSource();
}
//配置Druid监控管理后台的Servlet
    //内置Servlet容器时没有web.xml文件，所以使用Spring Boot的注册Servlet方式
  @Bean
    public ServletRegistrationBean startionBean(){
      ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),
              "/druid/*");
      //这些参数可以在com.alibaba.druid.support.http.StatViewServlet的父类
      //com.alibaba.druid.support.http.ResourceServlet中找到
      Map<String,String> initParameters=new HashMap<>();
      //后台管理界面的登录账号（“loginUsername”是固定的，不能写错）
      initParameters.put("loginUsername","admin");
      //后台管理界面的登录密码（“loginPassword”不能写错）
      initParameters.put("loginPassword","123456");
     /*定义后台允许谁可以访问
              initParams.put（“allow”，“localhost”），表示只有本机可以访问
              initParams.put（“allow”，“”），为空或者为null时，表示允许所有的访问
              * */
     initParameters.put("allow","");
     //deny：Druid 后台拒绝谁访问
      //initParams.put（“kuangshen”，“192.168.1.20”）,表示禁止此ip访问
      //设置初始化参数
      bean.setInitParameters(initParameters);
      return bean;
  }
  //配置Druid监控之，web监控的filter
    //webStatFilter：用于配置web和Druid数据源之间的管理关联监控统计
    @Bean
    public FilterRegistrationBean webStatFilter(){
    FilterRegistrationBean bean=new FilterRegistrationBean();
    bean.setFilter(new WebStatFilter());
    //exclusions:设置哪些请求进行过滤，排除，从而不进行统计
        Map<String,String> initParameters=new HashMap<>();
        initParameters.put("exclusions","*.js,*.css,/druid/*,/jdbc/*");
        bean.setInitParameters(initParameters);
        //"/*"表示过滤所有请求
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}
